{
 "cells": [
  {
   "cell_type": "code",
   "id": "initial_id",
   "metadata": {
    "collapsed": true,
    "ExecuteTime": {
     "end_time": "2025-10-14T10:01:55.833984Z",
     "start_time": "2025-10-14T10:01:30.445553Z"
    }
   },
   "source": [
    "import torch\n",
    "from langchain_huggingface import HuggingFaceEmbeddings\n",
    "\n",
    "# 加载嵌入模型\n",
    "embedding_model = HuggingFaceEmbeddings(\n",
    "    model_name=\"./bge-base-zh-v1.5\",\n",
    "    model_kwargs={\"device\": \"cuda\" if torch.cuda.is_available() else \"cpu\"},\n",
    "    encode_kwargs={\n",
    "        \"normalize_embeddings\": True\n",
    "    },  # 输出归一化向量，更适合余弦相似度计算\n",
    ")\n",
    "\n",
    "from langchain_chroma import Chroma\n",
    "\n",
    "# 初始化 Chroma 客户端\n",
    "vectorstore = Chroma(\n",
    "    persist_directory=\"vectorstore\",\n",
    "    embedding_function=embedding_model,\n",
    ")"
   ],
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/miniconda3/envs/rag-demo/lib/python3.10/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
      "  from .autonotebook import tqdm as notebook_tqdm\n",
      "/opt/miniconda3/envs/rag-demo/lib/python3.10/site-packages/torchvision/io/image.py:13: UserWarning: Failed to load image Python extension: 'dlopen(/opt/miniconda3/envs/rag-demo/lib/python3.10/site-packages/torchvision/image.so, 0x0006): Symbol not found: __ZN3c1017RegisterOperatorsD1Ev\n",
      "  Referenced from: <9B280146-BBD7-3F77-9873-F9740F2A5329> /opt/miniconda3/envs/rag-demo/lib/python3.10/site-packages/torchvision/image.so\n",
      "  Expected in:     <078DF3B7-D63C-3CEF-94C1-C063C5E5A468> /opt/miniconda3/envs/rag-demo/lib/libtorch_cpu.dylib'If you don't plan on using image functionality from `torchvision.io`, you can ignore this warning. Otherwise, there might be something wrong with your environment. Did you have `libjpeg` or `libpng` installed before building `torchvision` from source?\n",
      "  warn(\n"
     ]
    }
   ],
   "execution_count": 1
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-10-14T10:02:13.439562Z",
     "start_time": "2025-10-14T10:02:13.431036Z"
    }
   },
   "cell_type": "code",
   "source": "query = \"不动产或者动产被占有人占有怎么办\"",
   "id": "c78a6e7e00b63d96",
   "outputs": [],
   "execution_count": 2
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-10-14T10:03:04.823230Z",
     "start_time": "2025-10-14T10:03:04.421836Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 方式一：直接调用相似度检索，自动进行Embedding\n",
    "sim_docs = vectorstore.similarity_search(query,k=3)\n",
    "\n",
    "# 打印\n",
    "for doc in sim_docs:\n",
    "    print(doc.page_content)"
   ],
   "id": "a22aa55c47f770c9",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "第五分编　占有\n",
      "\n",
      "第二十章　占有\n",
      "\n",
      "第四百五十八条　基于合同关系等产生的占有，有关不动产或者动产的使用、收益、违约责任等，按照合同约定；合同没有约定或者约定不明确的，依照有关法律规定。\n",
      "\n",
      "第四百五十九条　占有人因使用占有的不动产或者动产，致使该不动产或者动产受到损害的，恶意占有人应当承担赔偿责任。\n",
      "\n",
      "第四百六十条　不动产或者动产被占有人占有的，权利人可以请求返还原物及其孳息；但是，应当支付善意占有人因维护该不动产或者动产支出的必要费用。\n",
      "\n",
      "第四百六十一条　占有的不动产或者动产毁损、灭失，该不动产或者动产的权利人请求赔偿的，占有人应当将因毁损、灭失取得的保险金、赔偿金或者补偿金等返还给权利人；权利人的损害未得到足够弥补的，恶意占有人还应当赔偿损失。\n",
      "\n",
      "第四百六十二条　占有的不动产或者动产被侵占的，占有人有权请求返还原物；对妨害占有的行为，占有人有权请求排除妨害或者消除危险；因侵占或者妨害造成损害的，占有人有权依法请求损害赔偿。\n",
      "\n",
      "占有人返还原物的请求权，自侵占发生之日起一年内未行使的，该请求权消灭。\n",
      "\n",
      "第三编　合同\n",
      "\n",
      "第一分编　通则\n",
      "\n",
      "第一章　一般规定\n",
      "第二百一十八条　权利人、利害关系人可以申请查询、复制不动产登记资料，登记机构应当提供。\n",
      "\n",
      "第二百一十九条　利害关系人不得公开、非法使用权利人的不动产登记资料。\n",
      "\n",
      "第二百二十条　权利人、利害关系人认为不动产登记簿记载的事项错误的，可以申请更正登记。不动产登记簿记载的权利人书面同意更正或者有证据证明登记确有错误的，登记机构应当予以更正。\n",
      "\n",
      "不动产登记簿记载的权利人不同意更正的，利害关系人可以申请异议登记。登记机构予以异议登记，申请人自异议登记之日起十五日内不提起诉讼的，异议登记失效。异议登记不当，造成权利人损害的，权利人可以向申请人请求损害赔偿。\n",
      "\n",
      "第二百二十一条　当事人签订买卖房屋的协议或者签订其他不动产物权的协议，为保障将来实现物权，按照约定可以向登记机构申请预告登记。预告登记后，未经预告登记的权利人同意，处分该不动产的，不发生物权效力。\n",
      "\n",
      "预告登记后，债权消灭或者自能够进行不动产登记之日起九十日内未申请登记的，预告登记失效。\n",
      "\n",
      "第二百二十二条　当事人提供虚假材料申请登记，造成他人损害的，应当承担赔偿责任。\n",
      "第二百二十二条　当事人提供虚假材料申请登记，造成他人损害的，应当承担赔偿责任。\n",
      "\n",
      "因登记错误，造成他人损害的，登记机构应当承担赔偿责任。登记机构赔偿后，可以向造成登记错误的人追偿。\n",
      "\n",
      "第二百二十三条　不动产登记费按件收取，不得按照不动产的面积、体积或者价款的比例收取。\n",
      "\n",
      "第二节　动产交付\n",
      "\n",
      "第二百二十四条　动产物权的设立和转让，自交付时发生效力，但是法律另有规定的除外。\n",
      "\n",
      "第二百二十五条　船舶、航空器和机动车等的物权的设立、变更、转让和消灭，未经登记，不得对抗善意第三人。\n",
      "\n",
      "第二百二十六条　动产物权设立和转让前，权利人已经占有该动产的，物权自民事法律行为生效时发生效力。\n",
      "\n",
      "第二百二十七条　动产物权设立和转让前，第三人占有该动产的，负有交付义务的人可以通过转让请求第三人返还原物的权利代替交付。\n",
      "\n",
      "第二百二十八条　动产物权转让时，当事人又约定由出让人继续占有该动产的，物权自该约定生效时发生效力。\n",
      "\n",
      "第三节　其他规定\n",
      "\n",
      "第二百二十九条　因人民法院、仲裁机构的法律文书或者人民政府的征收决定等，导致物权设立、变更、转让或者消灭的，自法律文书或者征收决定等生效时发生效力。\n"
     ]
    }
   ],
   "execution_count": 3
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-10-14T10:03:36.340376Z",
     "start_time": "2025-10-14T10:03:36.239370Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 方式二：最大边际相关性检索\n",
    "sim_docs = vectorstore.max_marginal_relevance_search(query,k=3)\n",
    "for doc in sim_docs:\n",
    "    print(doc)"
   ],
   "id": "74f1ec9acd042daa",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "page_content='第五分编　占有\n",
      "\n",
      "第二十章　占有\n",
      "\n",
      "第四百五十八条　基于合同关系等产生的占有，有关不动产或者动产的使用、收益、违约责任等，按照合同约定；合同没有约定或者约定不明确的，依照有关法律规定。\n",
      "\n",
      "第四百五十九条　占有人因使用占有的不动产或者动产，致使该不动产或者动产受到损害的，恶意占有人应当承担赔偿责任。\n",
      "\n",
      "第四百六十条　不动产或者动产被占有人占有的，权利人可以请求返还原物及其孳息；但是，应当支付善意占有人因维护该不动产或者动产支出的必要费用。\n",
      "\n",
      "第四百六十一条　占有的不动产或者动产毁损、灭失，该不动产或者动产的权利人请求赔偿的，占有人应当将因毁损、灭失取得的保险金、赔偿金或者补偿金等返还给权利人；权利人的损害未得到足够弥补的，恶意占有人还应当赔偿损失。\n",
      "\n",
      "第四百六十二条　占有的不动产或者动产被侵占的，占有人有权请求返还原物；对妨害占有的行为，占有人有权请求排除妨害或者消除危险；因侵占或者妨害造成损害的，占有人有权依法请求损害赔偿。\n",
      "\n",
      "占有人返还原物的请求权，自侵占发生之日起一年内未行使的，该请求权消灭。\n",
      "\n",
      "第三编　合同\n",
      "\n",
      "第一分编　通则\n",
      "\n",
      "第一章　一般规定' metadata={'source': 'knowledge_base/sample.docx'}\n",
      "page_content='（三）如实、及时登记有关事项；\n",
      "\n",
      "（四）法律、行政法规规定的其他职责。\n",
      "\n",
      "申请登记的不动产的有关情况需要进一步证明的，登记机构可以要求申请人补充材料，必要时可以实地查看。\n",
      "\n",
      "第二百一十三条　登记机构不得有下列行为：\n",
      "\n",
      "（一）要求对不动产进行评估；\n",
      "\n",
      "（二）以年检等名义进行重复登记；\n",
      "\n",
      "（三）超出登记职责范围的其他行为。\n",
      "\n",
      "第二百一十四条　不动产物权的设立、变更、转让和消灭，依照法律规定应当登记的，自记载于不动产登记簿时发生效力。\n",
      "\n",
      "第二百一十五条　当事人之间订立有关设立、变更、转让和消灭不动产物权的合同，除法律另有规定或者当事人另有约定外，自合同成立时生效；未办理物权登记的，不影响合同效力。\n",
      "\n",
      "第二百一十六条　不动产登记簿是物权归属和内容的根据。\n",
      "\n",
      "不动产登记簿由登记机构管理。\n",
      "\n",
      "第二百一十七条　不动产权属证书是权利人享有该不动产物权的证明。不动产权属证书记载的事项，应当与不动产登记簿一致；记载不一致的，除有证据证明不动产登记簿确有错误外，以不动产登记簿为准。\n",
      "\n",
      "第二百一十八条　权利人、利害关系人可以申请查询、复制不动产登记资料，登记机构应当提供。' metadata={'source': 'knowledge_base/sample.docx'}\n",
      "page_content='代管有争议，没有前款规定的人，或者前款规定的人无代管能力的，由人民法院指定的人代管。\n",
      "\n",
      "第四十三条　财产代管人应当妥善管理失踪人的财产，维护其财产权益。\n",
      "\n",
      "失踪人所欠税款、债务和应付的其他费用，由财产代管人从失踪人的财产中支付。\n",
      "\n",
      "财产代管人因故意或者重大过失造成失踪人财产损失的，应当承担赔偿责任。\n",
      "\n",
      "第四十四条　财产代管人不履行代管职责、侵害失踪人财产权益或者丧失代管能力的，失踪人的利害关系人可以向人民法院申请变更财产代管人。\n",
      "\n",
      "财产代管人有正当理由的，可以向人民法院申请变更财产代管人。\n",
      "\n",
      "人民法院变更财产代管人的，变更后的财产代管人有权请求原财产代管人及时移交有关财产并报告财产代管情况。\n",
      "\n",
      "第四十五条　失踪人重新出现，经本人或者利害关系人申请，人民法院应当撤销失踪宣告。\n",
      "\n",
      "失踪人重新出现，有权请求财产代管人及时移交有关财产并报告财产代管情况。\n",
      "\n",
      "第四十六条　自然人有下列情形之一的，利害关系人可以向人民法院申请宣告该自然人死亡：\n",
      "\n",
      "（一）下落不明满四年；\n",
      "\n",
      "（二）因意外事件，下落不明满二年。' metadata={'source': 'knowledge_base/sample.docx'}\n"
     ]
    }
   ],
   "execution_count": 4
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-10-14T10:05:11.462602Z",
     "start_time": "2025-10-14T10:05:11.276202Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 方式三：先获取检索器，再进行检索\n",
    "retriever = vectorstore.as_retriever()\n",
    "sim_docs=retriever.invoke(query)\n",
    "for doc in sim_docs:\n",
    "    print(doc)"
   ],
   "id": "d9cc5b3462d1515b",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "page_content='第五分编　占有\n",
      "\n",
      "第二十章　占有\n",
      "\n",
      "第四百五十八条　基于合同关系等产生的占有，有关不动产或者动产的使用、收益、违约责任等，按照合同约定；合同没有约定或者约定不明确的，依照有关法律规定。\n",
      "\n",
      "第四百五十九条　占有人因使用占有的不动产或者动产，致使该不动产或者动产受到损害的，恶意占有人应当承担赔偿责任。\n",
      "\n",
      "第四百六十条　不动产或者动产被占有人占有的，权利人可以请求返还原物及其孳息；但是，应当支付善意占有人因维护该不动产或者动产支出的必要费用。\n",
      "\n",
      "第四百六十一条　占有的不动产或者动产毁损、灭失，该不动产或者动产的权利人请求赔偿的，占有人应当将因毁损、灭失取得的保险金、赔偿金或者补偿金等返还给权利人；权利人的损害未得到足够弥补的，恶意占有人还应当赔偿损失。\n",
      "\n",
      "第四百六十二条　占有的不动产或者动产被侵占的，占有人有权请求返还原物；对妨害占有的行为，占有人有权请求排除妨害或者消除危险；因侵占或者妨害造成损害的，占有人有权依法请求损害赔偿。\n",
      "\n",
      "占有人返还原物的请求权，自侵占发生之日起一年内未行使的，该请求权消灭。\n",
      "\n",
      "第三编　合同\n",
      "\n",
      "第一分编　通则\n",
      "\n",
      "第一章　一般规定' metadata={'source': 'knowledge_base/sample.docx'}\n",
      "page_content='第二百一十八条　权利人、利害关系人可以申请查询、复制不动产登记资料，登记机构应当提供。\n",
      "\n",
      "第二百一十九条　利害关系人不得公开、非法使用权利人的不动产登记资料。\n",
      "\n",
      "第二百二十条　权利人、利害关系人认为不动产登记簿记载的事项错误的，可以申请更正登记。不动产登记簿记载的权利人书面同意更正或者有证据证明登记确有错误的，登记机构应当予以更正。\n",
      "\n",
      "不动产登记簿记载的权利人不同意更正的，利害关系人可以申请异议登记。登记机构予以异议登记，申请人自异议登记之日起十五日内不提起诉讼的，异议登记失效。异议登记不当，造成权利人损害的，权利人可以向申请人请求损害赔偿。\n",
      "\n",
      "第二百二十一条　当事人签订买卖房屋的协议或者签订其他不动产物权的协议，为保障将来实现物权，按照约定可以向登记机构申请预告登记。预告登记后，未经预告登记的权利人同意，处分该不动产的，不发生物权效力。\n",
      "\n",
      "预告登记后，债权消灭或者自能够进行不动产登记之日起九十日内未申请登记的，预告登记失效。\n",
      "\n",
      "第二百二十二条　当事人提供虚假材料申请登记，造成他人损害的，应当承担赔偿责任。' metadata={'source': 'knowledge_base/sample.docx'}\n",
      "page_content='第二百二十二条　当事人提供虚假材料申请登记，造成他人损害的，应当承担赔偿责任。\n",
      "\n",
      "因登记错误，造成他人损害的，登记机构应当承担赔偿责任。登记机构赔偿后，可以向造成登记错误的人追偿。\n",
      "\n",
      "第二百二十三条　不动产登记费按件收取，不得按照不动产的面积、体积或者价款的比例收取。\n",
      "\n",
      "第二节　动产交付\n",
      "\n",
      "第二百二十四条　动产物权的设立和转让，自交付时发生效力，但是法律另有规定的除外。\n",
      "\n",
      "第二百二十五条　船舶、航空器和机动车等的物权的设立、变更、转让和消灭，未经登记，不得对抗善意第三人。\n",
      "\n",
      "第二百二十六条　动产物权设立和转让前，权利人已经占有该动产的，物权自民事法律行为生效时发生效力。\n",
      "\n",
      "第二百二十七条　动产物权设立和转让前，第三人占有该动产的，负有交付义务的人可以通过转让请求第三人返还原物的权利代替交付。\n",
      "\n",
      "第二百二十八条　动产物权转让时，当事人又约定由出让人继续占有该动产的，物权自该约定生效时发生效力。\n",
      "\n",
      "第三节　其他规定\n",
      "\n",
      "第二百二十九条　因人民法院、仲裁机构的法律文书或者人民政府的征收决定等，导致物权设立、变更、转让或者消灭的，自法律文书或者征收决定等生效时发生效力。' metadata={'source': 'knowledge_base/sample.docx'}\n",
      "page_content='国家实行社会主义市场经济，保障一切市场主体的平等法律地位和发展权利。\n",
      "\n",
      "第二百零七条　国家、集体、私人的物权和其他权利人的物权受法律平等保护，任何组织或者个人不得侵犯。\n",
      "\n",
      "第二百零八条　不动产物权的设立、变更、转让和消灭，应当依照法律规定登记。动产物权的设立和转让，应当依照法律规定交付。\n",
      "\n",
      "第二章　物权的设立、变更、转让和消灭\n",
      "\n",
      "第一节　不动产登记\n",
      "\n",
      "第二百零九条　不动产物权的设立、变更、转让和消灭，经依法登记，发生效力；未经登记，不发生效力，但是法律另有规定的除外。\n",
      "\n",
      "依法属于国家所有的自然资源，所有权可以不登记。\n",
      "\n",
      "第二百一十条　不动产登记，由不动产所在地的登记机构办理。\n",
      "\n",
      "国家对不动产实行统一登记制度。统一登记的范围、登记机构和登记办法，由法律、行政法规规定。\n",
      "\n",
      "第二百一十一条　当事人申请登记，应当根据不同登记事项提供权属证明和不动产界址、面积等必要材料。\n",
      "\n",
      "第二百一十二条　登记机构应当履行下列职责：\n",
      "\n",
      "（一）查验申请人提供的权属证明和其他必要材料；\n",
      "\n",
      "（二）就有关登记事项询问申请人；\n",
      "\n",
      "（三）如实、及时登记有关事项；\n",
      "\n",
      "（四）法律、行政法规规定的其他职责。' metadata={'source': 'knowledge_base/sample.docx'}\n"
     ]
    }
   ],
   "execution_count": 5
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
